/**
 * This file is part of the Source Dedicated Server Controller project.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses>.
 * 
 * Additional permission under GNU GPL version 3 section 7
 * 
 * If you modify this Program, or any covered work, by linking or
 * combining it with srcds-controller (or a modified version of that library),
 * containing parts covered by the terms of GNU General Public License,
 * the licensors of this Program grant you additional permission to convey
 * the resulting work. {Corresponding Source for a non-source form of such a
 * combination shall include the source code for the parts of srcds-controller
 * used as well as that of the covered work.}
 *
 * For more information, please consult:
 *    <http://www.earthquake-clan.de/srcds/>
 *    <http://code.google.com/p/srcds-controller/>
 */
package de.eqc.srcds.core;

import java.util.logging.Logger;

import de.eqc.srcds.core.logging.LogFactory;

public class ShutdownHook extends Thread {

    private static Logger log = LogFactory.getLogger(ShutdownHook.class);

    private final Thread mainThread;
    private final HttpServerController httpServerController;
    private final SourceDServerController srcdsController;

    public ShutdownHook(final Thread mainThread,
	    final SourceDServerController srcdsController,
	    final HttpServerController httpServerController) {

	setName(getClass().getSimpleName());
	this.mainThread = mainThread;
	this.srcdsController = srcdsController;
	this.httpServerController = httpServerController;
    }

    @Override
    public void run() {

	httpServerController.stopGraceful();
	srcdsController.stopGraceful();

	try {
	    mainThread.join();
	} catch (InterruptedException e) {

	    log.info("Shutdown interrupted");
	}

	// TODO: flush log
    }
}